const crypto = require('crypto');
const jwt = require('jsonwebtoken');
module.exports = {
    /**
     * 密码加密辅助函数
     * @param {string} raw_password 要加密的原始密码
     */
    passwordEncoder(raw_password) {
        return crypto
            .createHmac('sha256', this.config.keys)
            .update(raw_password)
            .digest('hex');
    },
    /**
     * 生成 jwt 令牌的辅助函数
     * @param {object} user 需要保存到 token 中的用户信息
     */
    genToken(user) {
        return jwt.sign(user, this.app.config.keys, { expiresIn: '2h' });
    },
    /**
     * 校验 token 的合法性
     * @param {string} token 服务器生成的 token 令牌
     */
    checkToken(token) {
        return jwt.verify(token, this.app.config.keys);
    },
    /**
     * 将日期格式化为：yyyy-mm-dd 格式
     * @param {Date} date 要格式化的日期
     */
    dateFormat(date) {
        if (date instanceof Date) {
            // 年
            let y = date.getFullYear();
            // 月
            let m = String(date.getMonth() + 1).padStart(2, '0');
            // 日
            let d = String(date.getDate()).padStart(2, '0');
            return `${y}-${m}-${d}`;
        }
    },
    /**
     * 汉字获取拼音
     * @param {string} name 用户姓名
     */
    getCharFromChinese(name) {
        const pyArr = pinyin(name, {
            style: pinyin.STYLE_NORMAL, // 不带声调
        });
        return pyArr
            .map((item) => item[0].replace(/^\S/, (s) => s.toUpperCase()))
            .join('');
    },
};
